package com.binarywang.spring.starter.wxjava.tp.properties;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.io.File;
import java.io.Serializable;

/**
 * 企业微信接入相关配置属性
 *
 * @author yl
 * created on  2021/12/6
 */
@Data
@NoArgsConstructor
@ConfigurationProperties(prefix = WxCpTpProperties.PREFIX)
public class WxCpTpProperties {
  public static final String PREFIX = "wx.cp.tp";


  /**
   * 微信访问地址
   */
  private String baseApiUrl;
  /**
   * suiteId 服务商平台第三方应用页面查看
   */
  private volatile String suiteId;
  /**
   * 第三方应用密钥 服务商平台-应用管理页面查看
   */
  private volatile String suiteSecret;

  /**
   * 企微服务商企业ID 服务商平台-服务商信息页面查看
   */
  private volatile String corpId;
  /**
   * 第三方应用的token，用来检查应用的签名 服务商平台-应用管理页面-回调配置栏查看
   */
  private volatile String token;

  /**
   * 第三方应用的EncodingAESKey，用来检查签名 服务商平台-应用管理页面-回调配置栏查看
   */
  private volatile String aesKey;


  /**
   * 服务商secret 查看页面: https://open.work.weixin.qq.com/wwopen/developer#/sass/power/inter
   */
  private String providerSecret;

  private volatile String oauth2redirectUri;

  private File tmpDirFile;
  /**
   * 配置存储策略，默认内存
   */
  private ConfigStorage configStorage = new ConfigStorage();

  @Data
  @NoArgsConstructor
  public static class ConfigStorage implements Serializable {
    private static final long serialVersionUID = 4815731027000065434L;
    /**
     * 存储类型
     */
    private StorageType type = StorageType.memory;

    /**
     * http代理主机
     */
    private String httpProxyHost;

    /**
     * http代理端口
     */
    private Integer httpProxyPort;

    /**
     * http代理用户名
     */
    private String httpProxyUsername;

    /**
     * http代理密码
     */
    private String httpProxyPassword;

    /**
     * http 请求最大重试次数
     * <pre>
     *   {@link me.chanjar.weixin.cp.api.WxCpService#setMaxRetryTimes(int)}
     *   {@link me.chanjar.weixin.cp.api.impl.BaseWxCpServiceImpl#setMaxRetryTimes(int)}
     * </pre>
     */
    private int maxRetryTimes = 5;

    /**
     * http 请求重试间隔
     * <pre>
     *   {@link me.chanjar.weixin.cp.api.WxCpService#setRetrySleepMillis(int)}
     *   {@link me.chanjar.weixin.cp.api.impl.BaseWxCpServiceImpl#setRetrySleepMillis(int)}
     * </pre>
     */
    private int retrySleepMillis = 1000;
  }

  public enum StorageType {
    /**
     * 内存
     */
    memory
  }
}
